স্প্রিং বুট (Spring Boot) অ্যাপ্লিকেশনগুলিতে লগিং (Logging) অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ডেভেলপারদের জন্য ডিবাগিং, ত্রুটি শনাক্তকরণ এবং অ্যাপ্লিকেশন পারফরমেন্স মনিটরিং সহজ করে তোলে। স্প্রিং বুটে লগিং ইমপ্লিমেন্টেশন সাধারণত SLF4J (Simple Logging Facade for Java) এবং Logback ব্যবহার করে করা হয়। এখানে আমরা একটি উদাহরণ সহ স্প্রিং বুটে লগিং কিভাবে ইমপ্লিমেন্ট করা যায় তা দেখব।
১. স্প্রিং বুট লগিং কনফিগারেশন
স্প্রিং বুট ডিফল্টভাবে SLF4J এবং Logback লাইব্রেরি অন্তর্ভুক্ত করে, যা লগিংয়ের জন্য ব্যবহৃত হয়। আপনার স্প্রিং বুট প্রকল্পে লগিং কনফিগারেশন করার জন্য আপনাকে কিছু অতিরিক্ত লাইব্রেরি অন্তর্ভুক্ত করার প্রয়োজন নেই, কারণ এই লাইব্রেরি ইতোমধ্যে মেভেন বা গ্রেডল ডিপেনডেন্সির মধ্যে অন্তর্ভুক্ত থাকে।
২. লগিং লাইব্রেরি কনফিগারেশন
স্প্রিং বুটে লগিং কনফিগারেশন সাধারণত application.properties অথবা application.yml ফাইলে করা হয়। এখানে আমরা application.properties ফাইলের মাধ্যমে লগিং কনফিগারেশন দেখাব।
উদাহরণ: application.properties ফাইলে লগিং কনফিগারেশন
# Set the logging level
logging.level.org.springframework=INFO
logging.level.com.example=DEBUG
# Log output format
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
# Log to a file
logging.file.name=app.log
logging.level: নির্দিষ্ট প্যাকেজের জন্য লগিং লেভেল নির্ধারণ করে। এখানে,com.exampleপ্যাকেজের জন্যDEBUGলেভেল এবংorg.springframeworkপ্যাকেজের জন্যINFOলেভেল নির্ধারণ করা হয়েছে।logging.pattern.console: কনসোলের লগ ফরম্যাট কনফিগার করে। এখানে, লগের টাইমস্ট্যাম্প এবং মেসেজ প্রদর্শিত হবে।logging.file.name: লগ ফাইলের নাম নির্ধারণ করে। এই কনফিগারেশনটি লগ ফাইল হিসেবেapp.logতৈরি করবে।
৩. লগিং কোডে ব্যবহার
স্প্রিং বুটে লগিং করার জন্য সাধারণত SLF4J লগ ফ্যাসেড ব্যবহার করা হয়। এই ফ্যাসেডের মাধ্যমে আপনি লগিং করতে পারবেন, এবং এটি নিজে থেকেই Logback বা অন্য লগিং ইমপ্লিমেন্টেশনে পরিবর্তিত হতে পারে।
উদাহরণ: কোডে লগিং
package com.example.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LoggingController {
private static final Logger logger = LoggerFactory.getLogger(LoggingController.class);
@GetMapping("/log")
public String logExample() {
logger.trace("This is a TRACE level message.");
logger.debug("This is a DEBUG level message.");
logger.info("This is an INFO level message.");
logger.warn("This is a WARN level message.");
logger.error("This is an ERROR level message.");
return "Logging example completed";
}
}
এখানে:
LoggerFactory.getLogger(LoggingController.class)দ্বারা লগার তৈরি করা হয়েছে।- তারপর, বিভিন্ন লেভেলে লগ মেসেজ লেখা হয়েছে:
TRACE,DEBUG,INFO,WARN, এবংERROR।
৪. লগ লেভেল ব্যাখ্যা
স্প্রিং বুটে বিভিন্ন ধরনের লগ লেভেল রয়েছে, এবং প্রতিটি লেভেল তার নিজস্ব ব্যবহারিক উদ্দেশ্য পূর্ণ করে। এই লেভেলগুলো হল:
- TRACE: এটি সবচেয়ে নিম্ন স্তরের লগ। এটি অত্যন্ত বিস্তারিত তথ্য সরবরাহ করে, যা সাধারণত ডেভেলপমেন্ট বা ডিবাগিংয়ের জন্য ব্যবহৃত হয়।
- DEBUG: এটি সাধারণত ডেভেলপারদের জন্য, যখন একটি নির্দিষ্ট ফিচার বা প্রক্রিয়া সম্পর্কে বিস্তারিত তথ্যের প্রয়োজন হয়।
- INFO: সাধারণত অ্যাপ্লিকেশন চলাকালে গুরুত্বপূর্ণ কিন্তু সিস্টেমের পারফরমেন্সে প্রভাব না ফেলা এমন তথ্যের জন্য ব্যবহৃত হয়।
- WARN: এটি এমন একটি সিগন্যাল, যা ইঙ্গিত করে যে কিছু ভুল হতে পারে, কিন্তু তা অ্যাপ্লিকেশন চলার জন্য সমস্যা সৃষ্টি করছে না।
- ERROR: এটি সবচেয়ে গুরুত্বপূর্ণ লেভেল, যা অ্যাপ্লিকেশন বা সিস্টেমে একটি ত্রুটি বা সমস্যা চিহ্নিত করে, যা অ্যাপ্লিকেশন চলতে ব্যাহত হতে পারে।
৫. ফাইলের মধ্যে লগ সংরক্ষণ
স্প্রিং বুট লগিং কনফিগারেশনের মাধ্যমে আমরা লগগুলি একটি ফাইলেও সংরক্ষণ করতে পারি। পূর্বে উল্লেখিত application.properties ফাইলে লগ ফাইলের নাম নির্ধারণ করা হয়েছে, যা app.log নামে একটি ফাইল তৈরি করবে। স্প্রিং বুট ডিফল্টভাবে Logback ব্যবহার করে এবং এটি এই ফাইলের মধ্যে লগ সংরক্ষণ করবে।
উদাহরণ: logback-spring.xml কনফিগারেশন
স্প্রিং বুটের সাথে আরও কাস্টমাইজড লগিং ফরম্যাট এবং কনফিগারেশন যুক্ত করার জন্য আপনি logback-spring.xml কনফিগারেশন ফাইল ব্যবহার করতে পারেন। এটি একটি উদাহরণ:
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
এখানে, লগ কনসোল এবং ফাইলে উভয় জায়গায় লেখা হবে। logs/app.log ফাইলের মধ্যে লগগুলো সংরক্ষণ হবে।
৬. লগিং ফাইলের আর্কাইভিং
স্প্রিং বুটে লগ ফাইল আর্কাইভিং করার জন্য Logback এর সাথে TimeBasedRollingPolicy ব্যবহার করা যেতে পারে, যা লগ ফাইলের আকার বৃদ্ধি পাওয়ার সাথে সাথে পুরনো লগ ফাইলগুলো আর্কাইভ করে নতুন একটি ফাইল তৈরি করবে।
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
</appender>
এখানে, প্রতিদিন একটি নতুন লগ ফাইল তৈরি হবে এবং পুরনো ফাইলগুলি ৩০ দিন পর্যন্ত রাখা হবে।
উপসংহার
স্প্রিং বুট অ্যাপ্লিকেশনে লগিং ইমপ্লিমেন্ট করা খুবই সহজ এবং এটি ডেভেলপমেন্ট, ডিবাগিং এবং অ্যাপ্লিকেশন মনিটরিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ। SLF4J এবং Logback এর মাধ্যমে সহজেই লগিং কনফিগার করা যায় এবং অ্যাপ্লিকেশনের প্রয়োজন অনুযায়ী লগ ফাইল এবং কনসোল আউটপুট কাস্টমাইজ করা যায়। সঠিকভাবে লগিং ব্যবহারে অ্যাপ্লিকেশন ট্রাবলশুটিং ও পারফরমেন্স মনিটরিং সহজ হয়।
Read more